package com.system.service;

import com.github.pagehelper.PageInfo;
import com.system.entity.*;
import com.baomidou.mybatisplus.extension.service.IService;
import com.system.response.Result;
import com.system.response.permission.PermissionDtoResponse;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <p>
 * 权限表 服务类
 * </p>
 *
 * @author zfc
 * @since 2023-04-20
 */
public interface PermissionService extends IService<Permission> {

    /**
     * 查询所有权限
     * @return
     */
    Result all();

    /**
     * 根据角色名称查询该角色的所有权限键
     * @param roleName
     * @return
     */
    Set<String> selectAllPermissionKeyByRoleName(Set<String> roleName);

    /**
     * 分页模糊查询权限
     * @param permissionDto
     * @return
     */
    Result limitPermission(PermissionDtoResponse permissionDto);

    /**
     * 新增权限
     * @param permission
     * @return
     */
    boolean addPerssion(Permission permission);

    /**
     * 查询权限通过权限id
     * @param id
     * @return
     */
    Permission selectPermission(Integer id);

    /**
     * 修改权限
     * @param permission
     * @return
     */
    boolean updatePerssion(Permission permission);

    /**
     * 批量添加权限
     * @param list
     * @return
     */
    boolean batchAdditionPermission(List<Permission> list);

    /**
     * 批量修改权限状态
     * @param ids id列表
     * @param isDelete 修改状态
     * @return
     */
    Result batchUpdatePermissionStatus(Integer ids[],Integer isDelete);

    /**
     * 批量删除权限
     * @param ids
     * @return
     */
    boolean batchDeletePermission(Integer ids[]);
    /**
     * 检查权限是否存在
     * @param permission
     * @return
     */
    boolean checkPermissionUnique(Permission permission);

    /**
     * 检查权限名字是否存在，是原名称则返回false
     * @param permission
     * @return
     */
    boolean checkPermissionKeyIsOneself(Permission permission);


    /**
     * ------------------------------角色 绑定 权限-----------------------------------------
     */

    /**
     * 查询角色绑定的权限
     * @param roleId
     * @return
     */
    List<Permission> queryRolesBoundPermission(Integer roleId);

    /**
     * 给角色绑定权限（可以批量绑定权限），不能重复绑定
     * @param roleId
     * @param permissionIds
     * @return
     */
    boolean roleBoundPermission(Integer roleId, Integer[] permissionIds);

    /**
     * 检查该角色是否重复绑定权限
     * true:代表空
     * false：代表有值
     * @param roleId
     * @param permissionIds
     * @return
     */
    boolean checkRoleBoundPermissionUnique(Integer roleId,Integer[] permissionIds);

    /**
     * 批量删除 角色绑定权限
     * @param roleId
     * @param permissionIds
     * @return
     */
    boolean batchDeleteRoleBoundPermission(Integer roleId,Integer[] permissionIds);

    /**
     * 删除角色绑定的权限，根据角色ID
     * @param roleId
     * @return
     */
    boolean deleteRoleBoundPermissionById(Integer roleId);

    /**
     * 检查是否有角色绑定权限
     * true:不为空
     * false：为空
     * @param rp
     * @return
     */
    boolean checkRoleBoundPermission(RolePermission rp);
}
